/**
  ******************************************************************************
  * @file    controller_state.h
  ******************************************************************************
  */

#ifndef __CONTROLLER_STATE_H
#define __CONTROLLER_STATE_H

#ifdef __cplusplus
extern "C"
{
#endif

/**
 * @brief Controller的日志信息输出回调函数原型
 */
typedef int32_t (* controller_state_logcb_t)(char *message);

/**
 * @brief 设置Controller的日志信息输出使用的回调函数
 *
 * @param handler 日志回调函数
 *
 * @return int32_t 保留
 */
int32_t controller_state_set_logcb(controller_state_logcb_t handler);

/**
 * @brief API执行成功
 *
 */
#define STATE_SUCCESS                                               (0x0000)

/**
 * @brief -0x0100~-0x01FF表达SDK检查用户输入参数时反馈的状态码
 *
 */
#define STATE_USER_INPUT_BASE                                       (-0x0100)

/**
 * @brief 用户输入参数中包含非法的空指针
 *
 */
#define STATE_USER_INPUT_NULL_POINTER                               (-0x0101)

/**
 * @brief 用户输入参数中包含越界的值
 *
 */
#define STATE_USER_INPUT_OUT_RANGE                                  (-0x0102)

/**
 * @brief -0x0200~-0x02FF表达调用系统依赖函数时反馈的状态码
 *
 */
#define STATE_SYS_DEPEND_BASE                                       (-0x0200)

/**
 * @brief SDK从网络上实际读取的数据比期望读取的少
 *
 */
#define STATE_SYS_DEPEND_NWK_READ_LESSDATA                          (-0x0205)

/**
 * @brief SDK向网络上写入的实际数据比期望写入的少
 *
 */
#define STATE_SYS_DEPEND_NWK_WRITE_LESSDATA                         (-0x0206)

/**
 * @brief -0x0200~-0x02FF表达在Controller CAN模块内的状态码
 *
 */
#define STATE_CCAN_BASE                                             (-0x0300)

/**
 * @brief 解析收到的CAN报文时, 报文的数据已接收完毕, 没有更多数据
 *
 */
#define STATE_CCAN_READ_FINISHED                                    (-0x0301)

/**
 * @brief CAN数据接收未完成, 需确认CAN通信是否异常
 *
 */
#define STATE_CCAN_RECV_NOT_FINISHED                                (-0x0302)

/**
 * @brief CAN数据发送未完成, 需确认CAN通信是否异常
 *
 */
#define STATE_CCAN_SEND_NOT_FINISHED                                (-0x0303)

/**
 * @brief 内部buffer长度过短
 *
 */
#define STATE_CCAN_BUFFER_TOO_SHORT                                 (-0x0304)

/**
 * @brief -0x0F00~-0x0FFF表达在系统底层依赖模块内的状态码
 *
 */
#define STATE_PORT_BASE                                             (-0x0F00)

/**
 * @brief 底层依赖函数遇到非法的空指针参数, 执行失败
 *
 */
#define STATE_PORT_INPUT_NULL_POINTER                               (-0x0F01)

/**
 * @brief 底层依赖函数遇到输入参数超出合理值域, 执行失败
 *
 */
#define STATE_PORT_INPUT_OUT_RANGE                                  (-0x0F02)

/**
 * @brief 底层依赖函数遇到申请内存错误, 执行失败
 *
 */
#define STATE_PORT_MALLOC_FAILED                                    (-0x0F03)

/**
 * @brief 底层依赖函数配置CAN波特率返回错误, 执行失败
 *
 */
#define STATE_PORT_CAN_SET_BITRATE_FAILED                           (-0x0F04)

/**
 * @brief 底层依赖函数启动CAN通信返回错误, 执行失败
 *
 */
#define STATE_PORT_CAN_START_FAILED                                 (-0x0F05)

/**
 * @brief 底层依赖函数建立网络连接时遇到socket创建错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SOCKET_CREATE_FAILED                     (-0x0F06)

/**
 * @brief 底层依赖函数建立网络连接时遇到socket配置错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SOCKET_CONFIG_FAILED                     (-0x0F07)

/**
 * @brief 底层依赖函数建立网络连接时遇到bind错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SOCKET_BIND_FAILED                       (-0x0F08)

/**
 * @brief 底层依赖函数遇到套接字select错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SELECT_FAILED                            (-0x0F09)

/**
 * @brief 底层依赖函数遇到套接字poll错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_POLL_FAILED                              (-0x0F0A)

/**
 * @brief 底层依赖函数遇到网络层发送数据错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SEND_FAILED                              (-0x0F0B)

/**
 * @brief 底层依赖函数遇到网络层接收数据错误, 执行失败
 *
 */
#define STATE_PORT_NETWORK_RECV_FAILED                              (-0x0F0C)

/**
 * @brief 底层依赖函数发送数据时遇到连接已关闭, 执行失败
 *
 */
#define STATE_PORT_NETWORK_SEND_CONNECTION_CLOSED                   (-0x0F0D)

/**
 * @brief 底层依赖函数接收数据时遇到连接已关闭, 执行失败
 *
 */
#define STATE_PORT_NETWORK_RECV_CONNECTION_CLOSED                   (-0x0F0E)

#ifdef __cplusplus
}
#endif

#endif /* __CONTROLLER_STATE_H */
